package com.zhongwang.mms.module.purchase.dao;

import com.zhongwang.mms.common.JsonResult;
import com.zhongwang.mms.gen.entity.PInventory;
import com.zhongwang.mms.gen.entity.PInventoryExample;
import com.zhongwang.mms.gen.entity.TCost;
import com.zhongwang.mms.module.purchase.model.PInventoryModel;
import com.zhongwang.mms.module.purchase.model.PInventorySavePartialModel;
import com.zhongwang.mms.module.purchase.model.PurInvQueryModel;
import com.zhongwang.mms.module.purchase.model.proInv.PProjectInventoryMarkModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface PurPInventoryDao {
    /**
     * 代码生成器生成开始
     **/
    long countByExample(PInventoryExample example);

    int deleteByExample(PInventoryExample example);

    int deleteByPrimaryKey(Integer ityId);

    int insert(PInventory record);

    int insertSelective(PInventory record);

    int insertListSelective(@Param("list") List<PInventory> pInventoryList);

    List<PInventory> selectByExample(PInventoryExample example);

    PInventory selectByPrimaryKey(Integer ityId);

    int updateByExampleSelective(@Param("record") PInventory record, @Param("example") PInventoryExample example);

    int updateByExample(@Param("record") PInventory record, @Param("example") PInventoryExample example);

    int updateByPrimaryKeySelective(PInventory record);

    /**╭──────────────────────────────────────────────────────────────────────╮
    *  │  @方法名: updatePInventoryNumPrimaryKey                               │
    *  │  @方法说明: 检测库存是否够修改（大于0），否则不进行修改。                  │
    *  │  @参数说明: [record]                                                  │
    *  │  @返回类型说明: int                                                   │
    *  │  @作者: 徐一贺                                                        │
    *  │  @编程时间: 2020/8/3 10:37                                            │
    *  │  @版本号：v1.0                                                        │
    *  ╰──────────────────────────────────────────────────────────────────────╯*/
    int updatePInventoryNumPrimaryKey(PInventory record);

    int updateByPrimaryKey(PInventory record);

    PInventory findInventoryByParam(PInventory pInventory);
    /**代码生成器生成结束**/

    /**
     * @FunctionName: findInventoryList
     * @Description: 根据条件查询库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/3/24 16:50
     * @Phone: 18241927380
     * @Param: param 查询参数
     * @Return: List<PInventory> 库存信息
     * @Version: 1.0.0
     */
    List<PInventoryModel> findInventoryList(PInventoryModel param);
    /**
     * @FunctionName: findInventoryList
     * @Description: 根据条件查询串料库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/3/24 16:50
     * @Phone: 18241927380
     * @Param: param 查询参数
     * @Return: List<PInventory> 库存信息
     * @Version: 1.0.0
     */
    List<PInventoryModel> findInventoryListForChange(PInventoryModel param);
    /**
     * @FunctionName: findInventoryListByOut
     * @Description: 根据条件查询库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/3/24 16:50
     * @Phone: 18241927380
     * @Param: param 查询参数
     * @Return: List<PInventory> 库存信息
     * @Version: 1.0.0
     */
    List<PInventoryModel> findInventoryListByOut(PInventoryModel param);


    /**
     * @FunctionName: findInventoryListByIds
     * @Description: 获取转换后的库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/3/26 16:27
     * @Phone: 18241927380
     * @Param: ityIds
     * @Return: List<POrderDetail>
     * @Version: 1.0.0
     */
    List<PInventoryModel> findInventoryListByIds(String ityIds);

    /**
     * @FunctionName: findInventoryListByIds
     * @Description: 获取库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/3/26 16:27
     * @Phone: 18241927380
     * @Param: ityIds
     * @Return: List<POrderDetail>
     * @Version: 1.0.0
     */
    List<PInventoryModel> findInventoryModelListByIds(String ityIds);

    /**
     * @FunctionName: updateByPrimaryKeysSelective
     * @Description: 根据主键选择性更新
     * @Author: 徐一贺
     * @CreateDate: 2020/5/14 10:02
     * @Phone: 18241927380
     * @Param:
     * @Return:
     * @Version: 1.0.0
     */
    void updateByPrimaryKeysSelective(PInventorySavePartialModel param);

    /**
     * @FunctionName: 根据单据主键获取库存列表
     * @Description: findPInventoryListByOdrId
     * @Author: 徐一贺
     * @CreateDate: 2020/4/9 8:56
     * @Phone: 18241927380
     * @Param: odrId单据主键
     * @Return: PInventory 库存列表
     * @Version: 1.0.0
     */
    List<PInventory> findPInventoryListByOdrId(Integer odrId);

    /**
     * @FunctionName: findByPrimaryKey
     * @Description: 根据主键获取库存对象
     * @Author: 徐一贺
     * @CreateDate: 2020/4/9 9:10
     * @Phone: 18241927380
     * @Param: ityId 主键
     * @Return: PInventory库存对象
     * @Version: 1.0.0
     */
    PInventory findByPrimaryKey(Integer ityId);

    /**
     * @FunctionName: findInventoryByRowNumber
     * @Description: 根据行号返回对象，注如果是多条结果会报错，所以慎用
     * @Author: 徐一贺
     * @CreateDate: 2020/4/10 19:23
     * @Phone: 18241927380
     * @Param: rowNo 行号
     * @Return: PInventory 库存对象
     * @Version: 1.0.0
     */
    PInventory findInventoryByRowNumber(Integer rowNo);

    /**
     * @FunctionName: findInventoryByRowNumber
     * @Description: 根据行号返回对象，注如果是多条结果会报错，所以慎用 红冲专用
     * @Author: 徐一贺
     * @CreateDate: 2020/4/10 19:23
     * @Phone: 18241927380
     * @Param: rowNo 行号
     * @Return: PInventory 库存对象
     * @Version: 1.0.0
     */
    PInventory findInventoryByRowNumberRed(Integer rowNo);

    /**
     * @FunctionName: updateNumByPrimaryKey
     * @Description: 根据主键更改数量和可用数量
     * @Author: 徐一贺
     * @CreateDate: 2020/4/10 19:41
     * @Phone: 18241927380
     * @Param: pInventory 参数
     * @Return: 空
     * @Version: 1.0.0
     */
    void updateNumByPrimaryKey(PInventory pInventory);

    /**
     * @FunctionName: findInventoryByReqOdaId
     * @Description: 根据调拨单的出库明细主键获取库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/4/21 20:20
     * @Phone: 18241927380
     * @Param: [odaId] 拨单的出库明细主键
     * @Return: [PInventory]库存信息
     * @Version: 1.0.0
     */
    PInventory findInventoryByReqOdaId(Integer odaId);

    /**
     * @FunctionName: findInventoryByReqOdaId
     * @Description: 根据出库明细主键获取库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/4/21 20:20
     * @Phone: 18241927380
     * @Param: [odaId] 出库明细主键
     * @Return: [PInventory]库存信息
     * @Version: 1.0.0
     */
    PInventory findInventoryByodaOutItyId(Integer odaId);

    /**
     * @FunctionName: updateItyAvaNumByPrimary
     * @Description: 根据主键更改库存可用数量
     * @Author: 徐一贺
     * @CreateDate: 2020/4/21 20:22
     * @Phone: 18241927380
     * @Param: [ceoUsePInventory] 参数
     * @Version: 1.0.0
     */
    void updateItyAvaNumByPrimary(PInventory ceoUsePInventory);

    /**
     * @FunctionName: findInventoryListByityIds
     * @Description: 根据主键门获取库存列表
     * @Author: 徐一贺
     * @CreateDate: 2020/4/25 15:36
     * @Phone: 18241927380
     * @Param: [ityIds] 主键们
     * @Return: [PInventoryModel] 库存列表
     * @Version: 1.0.0
     */
    List<PInventory> findInventoryListByityIds(String ityIds);

    /**
     * @FunctionName: applyGetInventory
     * @Description: 根据主键获取库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/5/5 8:48
     * @Phone: 18241927380
     * @Param: [param.ityId] 主键
     * @Return: [com.zhongwang.mms.common.JsonResult.data] 库存信息
     * @Version: 1.0.0
     */
    PInventoryModel getInventoryByPrimaryKey(Integer ityId);

    /**
     * @FunctionName: findInventoryListByAdjust
     * @Description: 获取审核专用库存列表，库存列表不显示在审核中申请调整的库存
     * @Author: 徐一贺
     * @CreateDate: 2020/5/6 17:48
     * @Phone: 18241927380
     * @Param: [param] 查询条件
     * @Return: [List<PInventoryModel>] 库存列表
     * @Version: 1.0.0
     */
    List<PInventoryModel> findInventoryListByAdjust(PInventoryModel param);

    /**
     * @FunctionName: findInventoryByProInv
     * @Description: 获取新增项目划库存标记页面库存列表
     * @Author: 徐一贺
     * @CreateDate: 2020/5/6 19:34
     * @Phone: 18241927380
     * @Param: [param] 检索条件
     * @Return: [List<com.zhongwang.mms.module.purchase.model.proInv.PInventoryModel>] 项目划库存标记页面库存列表
     * @Version: 1.0.0
     */
    List<com.zhongwang.mms.module.purchase.model.proInv.PInventoryModel> findInventoryByProInv(com.zhongwang.mms.module.purchase.model.proInv.PInventoryModel param);

    /**
     * @FunctionName: getPInventoryByPrimaryKey
     * @Description: 根据主键获取外购件库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/5/8 9:57
     * @Phone: 18241927380
     * @Param: [pimBeforeItyId] 主键
     * @Return: [PProjectInventoryMarkModel] 外购件库存信息
     * @Version: 1.0.0
     */
    PProjectInventoryMarkModel getPInventoryByPrimaryKey(Integer pimBeforeItyId);

    /**
     * @FunctionName: getPInventoryByPrimaryKey
     * @Description: 根据主键获取成品库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/5/8 9:57
     * @Phone: 18241927380
     * @Param: [pimBeforeItyId] 主键
     * @Return: [PProjectInventoryMarkModel]成品库存信息
     * @Version: 1.0.0
     */
    PProjectInventoryMarkModel getHInventoryByPrimaryKey(Integer pimBeforeItyId);

    /**
     * @FunctionName: getPInventoryByPrimaryKey
     * @Description: 根据主键获取原料库存信息
     * @Author: 徐一贺
     * @CreateDate: 2020/5/8 9:57
     * @Phone: 18241927380
     * @Param: [pimBeforeItyId] 主键
     * @Return: [PProjectInventoryMarkModel]原料库存信息
     * @Version: 1.0.0
     */
    PProjectInventoryMarkModel getMInventoryByPrimaryKey(Integer pimBeforeItyId);

    /**
     * @FunctionName: getInventoryModelByPrimaryKey
     * @Description: 根据主键获取库存模型对象
     * @DesignIdea: 请填写设计思想
     * @Author: 徐一贺
     * @CreateDate: 2020/6/15 16:29
     * @Phone: 18241927380
     * @Param: 【ceoNeedItyId】 主键
     * @Return:
     * @Throw:
     * @Version: v 1.0.0
     */
    PInventoryModel getInventoryModelByPrimaryKey(String ceoNeedItyId);

    /**
     * @FunctionName: updateItyChangeFlagByPrimaryKey
     * @Description: 根据主键更改串料标记
     * @DesignIdea: 根据主键更改串料标记
     * @Author: 徐一贺
     * @CreateDate: 2020/6/22 8:06
     * @Phone: 18241927380
     * @Param: [ceoUsePInventory] 信息
     * @Return:
     * @Throw:
     * @Version: v 1.0.0
     */
    void updateItyChangeFlagByPrimaryKey(PInventory ceoUsePInventory);

    /**
     * @FunctionName: updateItyInvProFlagByPrimaryKey
     * @Description: 根据主键更改库存划项目标记
     * @DesignIdea: 根据主键更改库存划项目标记
     * @Author: 徐一贺
     * @CreateDate: 2020/6/22 8:06
     * @Phone: 18241927380
     * @Param: [ceoUsePInventory] 信息
     * @Return:
     * @Throw:
     * @Version: v 1.0.0
     */
    void updateItyInvProFlagByPrimaryKey(PInventory ceoUsePInventory);

    /**
     * 根据ID们获取库存中金额总数
     *
     * @param whiIds
     * @return
     */
    String getPInventoryTotalPriceByWhiIds(String whiIds);

    /**
     * 机械备件库划项目总金额
     * 筛选条件提供方：物控科
     * 筛选条件：无跟踪号，有项目名和项目编码
     *
     * @param whiIds
     * @return
     */
    String getPInventoryTotalPriceByWhiIdsForInvToPro(String whiIds);

    /**
     * /**
     * 暂缓项目总金额
     * 筛选条件提供方：物控科
     * 筛选条件：有跟踪号，有项目名和项目编码
     *
     * @param whiIds
     * @return
     */
    String getPInventoryTotalPriceByWhiIdsForInvForPostpone(String whiIds);

    /**
     * 获取机械备件库在库明细以及总金额页面列表
     *
     * @param param
     * @return
     */
    List<PurInvQueryModel> findPurInvList(PurInvQueryModel param);

    /**
     * 机械备件库划项目明细以及总金额页面列表数据
     *
     * @param param
     * @return
     */
    List<PurInvQueryModel> findPurInvProList(PurInvQueryModel param);

    /**
     * 列表
     * 暂缓项目在库明细及总金额页面列表数据
     *
     * @param param 查询条件
     * @return list
     */
    List<PurInvQueryModel> findPurInvPostponeList(PurInvQueryModel param);

    /**
     * 机械备件库月出库金额
     *
     * @param whiIds
     * @return
     */
    String mevMonthOut(String whiIds);

    /**
     * 机械备件库月入库金额
     *
     * @param whiIds
     * @return
     */
    String mevMonthIn(String whiIds);
    /**
     * getPInventoryByPrimaryKey
     * 根据主键获取库存信息
     * @param ityId
     * @return
     */
    PInventory getPInventoryByPK(Integer ityId);
    /**
     * getTCostByCode
     * 根据项目号获取成本中心
     * @param code
     * @return
     */
    TCost getTCostByCode(String code);

    /**
     * 依据外购件库存行号（入库单主键）获取对应的库存
     * @param odaId
     * @return
     */
    PInventory getPInventoryByRowNo(Integer odaId);

    /**********************************************
     * @title: updatePInventoryItyBrandByItyRow
     * @description: 根据行号更新品牌
     * @param:
     * @return:
     * @author: 徐一贺
     * @date: 2020/10/12 13:23
     * @versron: ver 1.0
     **********************************************
     */
    int updatePInventoryItyBrandByItyRow(@Param("ityRowNo") Integer odaId,@Param("ityBrand") String brand);


}